El viaje desde un struct hacia un Tipo de Datos Abstracto (TDA) marca la transición desde una "caja de vidrio", donde todos los cables internos son visibles, hacia una "caja negra" donde la interfaz está separada de la implementación. Este cambio garantiza encapsulamiento: los usuarios interactúan con funciones como leer o combinar sin necesidad de saber cómo se calcula o almacena el ingreso.
1. Arquitectura de Clases
Cada clase define una identidad única de tipo. Incluso si dos clases comparten miembros idénticos, C++ las trata como incompatibles. Usar typedef y declaraciones anticipadas (por ejemplo, class Pantalla;) nos permite diseñar relaciones complejas manteniendo la abstracción. A menudo usamos versiones sintetizadas de constructores, como Sales_data() = default;, para mantener la conveniencia de los tipos integrados ($$total = trans;$$).
2. Funciones de interfaz no miembro
Funciones como leer son Funciones relacionadas con la clase pero no miembro. Son parte de la interfaz pero no forman parte de la clase en sí, a menudo requiriendo amistad para acceder a datos privados.